/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.documentar.DAO;

import br.com.documentar.interfacee.InterfaceDAO;
import br.com.documentar.model.VersaoModel;
import java.sql.SQLException;
import java.util.Collections;
import java.util.List;

/**
 *
 * @author Robertto
 */
public class VersaoDAO extends AbstractDAO implements InterfaceDAO<List<VersaoModel>, VersaoModel> {

    @Override
    public boolean setDados(VersaoModel model) {
        String sql = null;
        ConnectDataBase();
        switch (model.getActionScript()) {
            case "I":
                sql = "INSERT INTO \n"
                        + "  `tver_versao`\n"
                        + "(\n"
                        //+ "  `TVER_CODIGO_PK`,\n"
                        + "  `TVER_PRODUTO_FK`,\n"
                        + "  `TVER_NOME`,\n"
                        + "  `TVER_DATA`,\n"
                        + "  `TVER_OBSERVACAO`,\n"
                        + "  `TVER_DAV`,\n"
                        + "  `TVER_ATIVO`) \n"
                        + "VALUE (\n"
                        //+ "  :TVER_CODIGO_PK,\n"
                        + "  " + model.getProduto().getCodigo() + ",\n"
                        + "  '" + model.getNome() + "',\n"
                        + "  '" + model.getData() + "',\n"
                        + "  '" + model.getObservacao() + "',\n"
                        + "  '" + model.getDav() + "',\n"
                        + "  '" + model.getAtivo() + "')";
                break;
            case "U":
                sql = "UPDATE \n"
                        + "  `tver_versao`  \n"
                        + "SET \n"
                        + "  `TVER_PRODUTO_FK` = " + model.getProduto().getCodigo() + ",\n"
                        + "  `TVER_NOME` = '" + model.getNome() + "',\n"
                        + "  `TVER_DATA` = '" + model.getData() + "',\n"
                        + "  `TVER_OBSERVACAO` = '" + model.getObservacao() + "',\n"
                        + "  `TVER_DAV` = '" + model.getDav() + "',\n"
                        + "  `TVER_ATIVO` = '" + model.getAtivo() + "' \n"
                        + "WHERE \n"
                        + "  `TVER_CODIGO_PK` = " + model.getCodigo() + "";
                break;
            case "D":
                sql = "DELETE FROM \n"
                        + "  `tver_versao` \n"
                        + "WHERE \n"
                        + "  `TVER_CODIGO_PK` = " + model.getCodigo() + "";
                break;
        }
        return InsertUpdateDelete(sql, model.getNomeTela());
    }

    @Override
    public List<VersaoModel> getDados(VersaoModel model) {
        model.setResultSet(null);
        model.getListaVersao().clear();
        String sql = "SELECT \n"
                + "  `versao`.`TVER_CODIGO_PK`,\n"
                + "  `versao`.`TVER_PRODUTO_FK`,\n"
                + "  `produto`.`TPRO_NOME`,\n"
                + "  `produto`.`TPRO_SIGLA`,\n"
                + "  `versao`.`TVER_NOME`,\n"
                + "  `versao`.`TVER_DATA`,\n"
                + "  `versao`.`TVER_OBSERVACAO`,\n"
                + "  `versao`.`TVER_DAV`,\n"
                + "  `versao`.`TVER_ATIVO`\n"
                + "FROM \n"
                + "  `tver_versao` versao \n"
                + "  inner join `tpro_produto` produto on `versao`.`TVER_PRODUTO_FK` = `produto`.`TPRO_CODIGO_PK`";
        try {
            ConnectDataBase();
            switch (model.getActionScript()) {
                case "C":
                    model.setResultSet(Select(sql, model.getNomeTela()));
                    break;
                case "P":
                    model.setResultSet(Select(sql + " where `versao`.`TVER_NOME` like '%" + model.getNome() + "%'", model.getNomeTela()));
                    break;
                case "porVersao"://possível remoção, pois está com filtro errado, o correto é o abaixo
                    model.setResultSet(Select(sql + " where `versao`.`TVER_PRODUTO_FK` = " + model.getProduto().getCodigo() + "", model.getNomeTela()));
                    break;
                case "porProduto":
                    model.setResultSet(Select(sql + " where `versao`.`TVER_PRODUTO_FK` = " + model.getProduto().getCodigo() + "", model.getNomeTela()));
                    break;
                case "porProdutoSiglaVersao":
                    model.setResultSet(Select(sql + "  where `produto`.`TPRO_SIGLA` = '" + model.getProduto().getSigla() + "' \n"
                            + " and `versao`.`TVER_NOME` = '" + model.getNome() + "' ", model.getNomeTela()));
                    break;
                case "porCategoriaVersao":
                    model.setResultSet(Select(sql + " where `versao`.`TVER_PRODUTO_FK` = " + model.getProduto().getCodigo() + " "
                            + " and EXISTS (select `categoriaVersao`.`TLNK_VERSAO_FK_PK` \n"
                            + " from `tlnk_categoria_versao` categoriaVersao \n"
                            + " where `categoriaVersao`.`TLNK_VERSAO_FK_PK` = `versao`.`TVER_CODIGO_PK`)", model.getNomeTela()));
                    break;
            }
            while (model.getResultSet().next()) {
                br.com.documentar.model.VersaoModel p = new br.com.documentar.model.VersaoModel();
                p.setCodigo(rs.getInt("TVER_CODIGO_PK"));
                p.getProduto().setCodigo(rs.getInt("TVER_PRODUTO_FK"));
                p.getProduto().setNome(rs.getString("TPRO_NOME"));
                p.getProduto().setSigla(rs.getString("TPRO_SIGLA"));
                p.setNome(rs.getString("TVER_NOME"));
                p.setData(rs.getString("TVER_DATA"));
                p.setDav(rs.getString("TVER_DAV"));
                p.setObservacao(rs.getString("TVER_OBSERVACAO"));
                p.setAtivo(rs.getString("TVER_ATIVO").charAt(0));
                model.getListaVersao().add(p);
            }
        } catch (SQLException ex) {
            ex.getStackTrace();
        } finally {
            Desconectar(model.getNomeTela());
        }
        /*Chamada do metodo que ordena os dados*/
        Collections.sort(model.getListaVersao());
        return model.getListaVersao();
    }
}
